﻿using System;
using System.Linq;

namespace MoroMoro.Samples.ToDoList.Base.Persistence.Fake
{
    /// <summary>
    /// メモリ上のコレクションを使用して実装されるリポジトリです。
    /// </summary>
    /// <typeparam name="TEntity">エンティティの型。</typeparam>
    /// <seealso cref="IRepository&lt;TEntity&gt;"/>
    /// <seealso cref="FWorkspace"/>
    internal sealed class FRepository<TEntity> : RepositoryBase<TEntity>
        where TEntity : class
    {
        /// <summary>
        /// <see cref="FRepository&lt;TEntity&gt;"/> クラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="workspace">作業スペース。</param>
        internal FRepository(FWorkspace workspace)
        {
            _workspace = workspace;
        }


        /// <summary>
        /// 作業スペース。
        /// </summary>
        private readonly FWorkspace _workspace;


        /// <inheritdoc/>
        protected override IQueryable<TEntity> CreateBaseQuery()
        {
            return _workspace.Query<TEntity>();
        }


        /// <inheritdoc/>
        public override void Add(TEntity target)
        {
            _workspace.AllEntityList.Add(target);
        }

        /// <inheritdoc/>
        public override void Remove(TEntity target)
        {
            _workspace.AllEntityList.Remove(target);
        }
    }
}
